﻿public Color[] RotatePic90(int width, int height, Color[] input)
{
    //图片旋转变体，矩阵左补空，上下交换后对角交换
    //这样空在上，像素在下，后行优先矩阵压缩

    //先上下交换
    for (int k = 0; k < width * height; k++)
    {
        //计算矩阵下像素的ij位置
        int i = k / width, j = k % width;
        //限制上下交换越界
        if (i >= (int)height / 2) break;
        //上下交换
        Color temp = input[i * width + j];
        input[i * width + j] = input[(height - i - 1) * width + j];
        input[(height - i - 1) * width + j] = temp;
    }

    Color[] m_input = new int[width * height];
    //矩阵补空差值
    int add = Math.Abs(width - height);
    //考虑实际运用图片不一定为正方形
    //矩阵左补空为行列式，对角交换，矩阵压缩
    for (int k = 0; k < width * height; k++)
    {
        //计算补空矩阵下像素的ij位置
        int i = k / width, j = (k % width) + add;
        //计算对应对角线坐标，以便对折替换
        int i_c = i, j_c = width - i - 1 + add;
        //计算镜面对角线对应点的位置
        int i_cur = j_c - j + i, j_cur = j_c;
        //计算对应一维数组的下标
        int index = i_cur * height + j_cur;
        m_input[index] = input[k];
    }
}
